[英]awk print something if column is empty
我正在嘗試一個腳本,其中文件[file.txt]具有如此多的列,例如
abc|pqr|lmn|123
pqr|xzy|321|azy
lee|cha| |325
xyz| |abc|123
我想使用awk命令在bash腳本中獲取列列表,如果列為空,則應打印為空白,否則打印列值
我已經嘗試了以下可能性,但是它不起作用
cat file.txt | awk -F "|" {'print $2'} | sed -e 's/^$/blank/' // Using awk and sed
cat file.txt | awk -F "|" '!$2 {print "blank"} '
cat file.txt | awk -F "|" '{if ($2 =="" ) print "blank" } '
請讓我知道我們如何使用awk或任何其他bash工具來做到這一點。
謝謝
您可以使用以下sed
腳本執行此操作:
sed -r 's/\| +\|/\|blank\|/g' File
abc|pqr|lmn|123
pqr|xzy|321|azy
lee|cha|blank|325
xyz|blank|abc|123
如果您不想要|
:
sed -r 's/\| +\|/\|blank\|/g; s/\|/ /g' File
abc pqr lmn 123
pqr xzy 321 azy
lee cha blank 325
xyz blank abc 123
其他與awk
:
awk '{gsub(/\| +\|/,"|blank|")}1' File
abc|pqr|lmn|123
pqr|xzy|321|azy
lee|cha|blank|325
xyz|blank|abc|123
我想你要找的是
awk -F '|' '{print match($2, /[^ ]/) ? $2 : "blank"}' file.txt
match(str, regex)
返回match(str, regex)
的第一個匹配項在str
中的位置;如果沒有匹配項match(str, regex)
返回0。 因此,在這種情況下,如果字段2中有一些非空白字符,它將返回一個非零值。請注意,在awk中,字符串中第一個字符的索引為1,而不是0。
在這里,我假設您只對單個列感興趣。
如果您希望能夠從bash變量中指定替換字符串,最好的解決方案是使用-v
開關將bash變量傳遞到awk程序中:
awk -F '|' -v blank="$replacement" \
'{print match($2, /[^ ]/) ? $2 : blank}' file.txt
這種機制避免了轉義元字符的問題。
您可以這樣使用awk:
awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) if ($i ~ /^ *$/) $i="blank"} 1' file
abc|pqr|lmn|123
pqr|xzy|321|azy
lee|cha|blank|325
xyz|blank|abc|123
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.