2014-12-02 36 views
0

我正在嘗試不同的命令來處理csv文件,其中分隔符是管道|字符。使用管道字符作爲字段分隔符

而當逗號分隔這些命令做的工作,它拋出,當我與管道替換它的錯誤:

awk -F[|] "NR==FNR{a[$2]=$0;next}$2 in a{ print a[$2] [|] $4 [|] $5 }" OFS=[|] file1.csv file2.csv 

awk "{print NR "|" $0}" file1.csv 

我試過了,"|"[|]/|無濟於事。

我在窗戶上使用Gawk。我錯過了什麼?

+2

您是否嘗試過'\ |',例如'awk -F \ | '{print NF}'bar.txt'? – jas 2014-12-02 10:05:20

+0

你的數據看起來像什麼?什麼是錯誤? – 2014-12-02 10:09:13

+0

這是你的'print'問題。正如我在答案中指出的那樣,只需使用逗號分隔字段即可。 – fedorqui 2014-12-02 10:10:30

回答

1

您試過"|",[|]/|/|不起作用,因爲轉義字符爲\,而[]用於定義一個字段範圍,例如[,-]如果您要將FS設置爲,-

爲了使它工作"|"是好的,你確定你用這種方式嗎? Alternativelly,逃吧 - >\|

$ echo "he|llo|how are|you" | awk -F"|" '{print $1}' 
he 
$ echo "he|llo|how are|you" | awk -F\| '{print $1}' 
he 
$ echo "he|llo|how are|you" | awk 'BEGIN{FS="|"} {print $1}' 
he 

但後來請注意,當你說:

print a[$2] [|] $4 [|] $5 

所以你不使用任何分隔符的。正如你已經定義OFS,做到:

print a[$2], $4, $5 

例子:

$ cat a 
he|llo|how are|you 
$ awk 'BEGIN {FS=OFS="|"} {print $1, $3}' a 
he|how are 
1

試圖逃跑的|

echo "more|data" | awk -F\| '{print $1}' 
more 
1

可以逃脫|作爲\|

$ cat test 
hello|world 
$ awk -F\| '{print $1, $2}' test 
hello world