或者,如果你想要一個更傳統的基於邏輯的解決方案,(和 - )這裏是另一種解決方案
awk -F\| 'BEGIN{OFS="|"}
{
#dbg print "#dbg:NF="NF;
# if this record has an extra character
if (NF>4){
# loop over all fields
for(i=1;i<=NF;i++){
# if not the field of interest or last field on line, just print it
if(i!=3 && i!=NF){
printf("%s|",$i)
}
# else this is the problem field, add the # char
else if (i==3){
printf $3"#"
}
# else if last field on line, add LF char at end
else if (i==NF){
printf ("%s\n",$i)
}
}
}
# record has correct number of FS chars
else {
print $0
}
}' dat.txt
輸出
NAME|NUM|ADDR|AGE
abcd|02|abc#cd|12
jake|04|xy#zzb|12
lau|92|#xcx| 56
我添加註釋的代碼解釋是怎麼回事。
這是爲所有重要的一行; - >
awk -F\| '{if (NF>4){for(i=1;i<=NF;i++){if(i!=3 && i!=NF){printf("%s|",$i)}else if(i==3){printf $3"#"}else if(i==NF){printf ("%s\n",$i)}}}else{print $0}}' dat.txt
IHTH
謝謝你的幫助。羅馬,我使用korn shell(ksh)是我得到這個錯誤的原因「-ksh:awk -F | NR == 1; NR> 1 && NF> 4 {s = $ 3」#「$ 4 ;打印$ 1,$ 2,s,$ 5} OFS = |:找不到[沒有這樣的文件或目錄]「,而我用你提供的soln u。 –
你可以在沒有額外變量的情況下完成它:'print $ 1,$ 2,$ 3「#」$ 4,$ 5' – valrog
@valrog,那是爲了演示的目的 – RomanPerekhrest