직렬 포트에 들어오는 스트림이 있으며 초당 약 한 번 새 줄이 나타납니다.
wren@Raven:~$ cat /dev/ttyUSB0
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
빈 줄을 제거하고 나머지 타임 스탬프를 만들고 싶습니다.
sed는 빈 줄을 끝내고 타임 스탬프를 추가하지만 타임 스탬프를 업데이트 할 수는 없으며 호출 된 시간 만보 고합니다.
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' -e "s/$/`date +\,%F\,%T`/"
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
^C
Moreutils의 일부인 ts를 찾았으며 업데이트 타임 스탬프를 얻기 위해 파이프에 연결할 수 있습니다.
wren@Raven:~$ cat /dev/ttyUSB0 | ts
May 14 09:49:26 A_Sensor1,B_22.00,C_50.00
May 14 09:49:26
May 14 09:49:27 A_Sensor1,B_22.00,C_50.00
^C
그러나 ts와 sed를 올바르게 결합 할 수 없습니다.
이것은 내가 원하는 것을 해야하는 것처럼 보이며 전혀 출력을 생성하지 않습니다.
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' | ts
^C
wren@Raven:~$
그러나 파이프 순서를 반대로하면 출력이 생성되지만 더 이상 비어 있지 않은 라인은 제거되지 않습니다. 다른 대체물은 잘 작동하므로 sed의 파이프가 작동한다는 것을 알고 있습니다.
wren@Raven:~$ cat /dev/ttyUSB0 | ts | sed -e '/^$/d'
May 14 10:07:25 A_Sensor1,B_22.00,C_50.00
May 14 10:07:25
May 14 10:07:26 A_Sensor1,B_22.00,C_50.00
May 14 10:07:26
^C
그래서 나는 약간 당황했습니다. 아마도 sed가 원치 않는 라인을 제거하도록 할 수는 있지만 제거하기 전에 타임 스탬프를 작성하는 것은 잘못된 접근법이어야합니다.
설명과 도움을 부탁드립니다.
sed -u
. 블록 버퍼링 vs. 라인 버퍼링 문제입니다.