我需要管的最後一條記錄逐字外部命令。我發現下面的代碼片段here,但它無條件地從過去的記錄中刪除ORS
。我只想在輸入文件中不存在RS
的情況下將其刪除。如何在awk的輸入文件中查找RS是否存在於最後一條記錄的末尾?
awk 'NR > 1 { print h } { h = $0 } END { ORS = ""; print h }' inputfile
我需要管的最後一條記錄逐字外部命令。我發現下面的代碼片段here,但它無條件地從過去的記錄中刪除ORS
。我只想在輸入文件中不存在RS
的情況下將其刪除。如何在awk的輸入文件中查找RS是否存在於最後一條記錄的末尾?
awk 'NR > 1 { print h } { h = $0 } END { ORS = ""; print h }' inputfile
你的邏輯是倒退和雙重負面的,這使得很難理解。如果我正確地理解了你,那麼如果RS不存在,那麼你不想刪除ORS,那是因爲如果RS存在,你只想添加ORS。
的最簡單的方法是使用GAWK用於RT所以每個輸出記錄是由封端的輸入記錄相同的字符串終止。
awk 'NR > 1 { printf "%s%s", $0, RT }' inputfile
一種便攜式的方法,而不是依靠GNU awk中RT
變量,就是增加一個虛擬記錄您的輸入:這後面沒有分隔虛擬記錄。
然後輸入被嚴格分開的,你只是有兩種情況處理:你要麼有一個空白第二到最後一個記錄,在這種情況下,真正的最後一個記錄是第三個到最後。否則,倒數第二個記錄纔是真正的最後一個記錄。
如果你跟蹤一個變量最近看到一個非空的記錄,你可以在處理結束打印記錄。
有各種各樣的方式來添加材料,以輸入的結束。例如,中cat
一些有用的用途:
(cat real_input; printf "<record_sep>dummy_rec") | awk '...'
或
cat real_input dummy_suffix | awk '...'
你想的腳本做其他什麼可以'cat'做什麼? – karakfa