我經常需要處理凌亂的文本數據,我需要打入字段。如何讓awk忽略數據中的換行符?
我已經有了使用退格(008十進制)作爲字段分隔符和刪除(十進制127)作爲記錄分隔符的良好經驗,因爲這些從不出現在輸入文件中。
我可以得到一個程序來按我想要的方式拆分所有東西,但我也想用awk。它接受RS=<delete>
,但它也打破了我不想要的換行符上的記錄。
顯然,我可以用某種順序替換換行符並將其翻轉,但是有沒有更簡單的方法來實現?
我經常需要處理凌亂的文本數據,我需要打入字段。如何讓awk忽略數據中的換行符?
我已經有了使用退格(008十進制)作爲字段分隔符和刪除(十進制127)作爲記錄分隔符的良好經驗,因爲這些從不出現在輸入文件中。
我可以得到一個程序來按我想要的方式拆分所有東西,但我也想用awk。它接受RS=<delete>
,但它也打破了我不想要的換行符上的記錄。
顯然,我可以用某種順序替換換行符並將其翻轉,但是有沒有更簡單的方法來實現?
我認爲這是按照您的預期工作,如果您根據需要設置RS和FS。
考慮:
$ echo -n $'a\bb\bc\177c\bd' | od -c
0000000 a \b b \b c 177 c \b d
0000011
您可以使用gawk
這樣:
$ echo -n $'a\bb\bc\177c\bd' | awk -v FS=$'\b' -v RS=$'\177' '{ print NR, NF, $1, $2, $3}'
1 3 a b c
2 2 c d
顯然\b
會導致$0
打印無法正常顯示,但記錄計數,字段計數,並個別領域如預期。
注意$'[string or character]'
的雙擊以設置測試字符串以創建單個字符RS
和FS
awk變量。
謝謝 - 這正是我需要的背部空間。抨擊是我錯過的。 找出包含退格,刪除,箭頭之類的文件是不可思議的,但可以使用我知道的字符不能在文件中,而無需先進行掃描 –
請添加示例輸入和期望的結果。猜測的工作太多了。 – dawg
不要回答你不明白的問題。我正在使用退格鍵並刪除字符作爲分隔符,因爲它們不會出現在手中輸入的數據文件中。對於一個簡單的測試,嘗試以下方法: 貓>測試 一個 b Ç d Ë˚F 克ħ我 這產生三個記錄用3場的每 - 最後場應該包含一個換行符。但是,如果您嘗試 awk'{FS =「\ 010」} {RS =「\ 177」} {ORS =「\ n」} {print NR「 - 」NF「 - 」 $ 0}'test 我保證這不是你會看到的。 –
@jas,如果設置爲最普通的字符,awk不會在換行符上中斷。但這不正常。我建議先測試行爲或做研究,然後告訴人們他們正在觀察的內容沒有發生。 –