2017-05-03 524 views
-3

我經常需要處理凌亂的文本數據,我需要打入字段。如何讓awk忽略數據中的換行符?

我已經有了使用退格(008十進制)作爲字段分隔符和刪除(十進制127)作爲記錄分隔符的良好經驗,因爲這些從不出現在輸入文件中。

我可以得到一個程序來按我想要的方式拆分所有東西,但我也想用awk。它接受RS=<delete>,但它也打破了我不想要的換行符上的記錄。

顯然,我可以用某種順序替換換行符並將其翻轉,但是有沒有更簡單的方法來實現?

+4

請添加示例輸入和期望的結果。猜測的工作太多了。 – dawg

+0

不要回答你不明白的問題。我正在使用退格鍵並刪除字符作爲分隔符,因爲它們不會出現在手中輸入的數據文件中。對於一個簡單的測試,嘗試以下方法: 貓>測試 一個 b Ç d Ë˚Fħ 這產生三個記錄用3場的每 - 最後場應該包含一個換行符。但是,如果您嘗試 awk'{FS =「\ 010」} {RS =「\ 177」} {ORS =「\ n」} {print NR「 - 」NF「 - 」 $ 0}'test 我保證這不是你會看到的。 –

+0

@jas,如果設置爲最普通的字符,awk不會在換行符上中斷。但這不正常。我建議先測試行爲或做研究,然後告訴人們他們正在觀察的內容沒有發生。 –

回答

1

我認爲這是按照您的預期工作,如果您根據需要設置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]'的雙擊以設置測試字符串以創建單個字符RSFS awk變量。

+0

謝謝 - 這正是我需要的背部空間。抨擊是我錯過的。 找出包含退格,刪除,箭頭之類的文件是不可思議的,但可以使用我知道的字符不能在文件中,而無需先進行掃描 –