仅需要从管道分隔的文件中提取奇数列。
SOURCE_FILE
1|ABC|WORK|1234
2|DEF|OFFICE|5678
3|GHI|HOME|9012
4|JKL|PERSONAL|3456
预期产量
1|WORK
2|OFFICE
3|HOME
4|PERSONAL
我尝试使用awk -F'|' '{ for (i=1;i<=NF;i+=2) $i="" } 1' OFS="|" New2.txt >> delimt.txt
,但它会删除值而不是位置。
答案 0 :(得分:2)
第一种解决方案: 。能否请您尝试以下操作。
awk 'BEGIN{FS=OFS="|"} {for(i=1;i<=NF;i+=2){val=(val?val OFS:"") $i};print val;val=""}' Input_file
第二个解决方案: :不使用变量,并且比第一个解决方案要快。请尝试以下方法。
awk 'BEGIN{FS=OFS="|"} {for(i=1;i<=NF;i+=2){printf("%s%s",$i,(i==NF ||i==(NF-1)) && i%2!=0?ORS:OFS)}}' Input_file
OR(添加上述解决方案的一个非衬里形式):
awk '
BEGIN{
FS=OFS="|"
}
{
for(i=1;i<=NF;i+=2){
printf("%s%s",$i,(i==NF || i==(NF-1)) && i%2!=0?ORS:OFS)
}
}
' Input_file
输出如下。
1|WORK
2|OFFICE
3|HOME
4|PERSONAL
答案 1 :(得分:1)
另一个awk
awk -F"|" -v OFS="|" ' { for(i=1;i<NF;i+=2) { printf("%s%s",s,$i);s="|"; } print "";s="" } '
具有给定的输入
$ cat praveen.txt
1|ABC|WORK|1234
2|DEF|OFFICE|5678
3|GHI|HOME|9012
4|JKL|PERSONAL|3456
$ awk -F"|" -v OFS="|" ' { for(i=1;i<NF;i+=2) { printf("%s%s",s,$i);s="|"; } print "";s="" } ' praveen.txt
1|WORK
2|OFFICE
3|HOME
4|PERSONAL
$
答案 2 :(得分:1)
您也可以使用coreutils进行此操作:
cols=$(head -n1 infile | tr '|' '\n' | wc -l)
cut -d'|' -f$(seq -s, 1 2 $cols) infile
输出:
1|WORK
2|OFFICE
3|HOME
4|PERSONAL