Awk 打印前四列,之后每四列打印一列
我有一张大桌子。我想保留前四列,但之后只打印第四列 我试过了Awk 打印前四列,之后每四列打印一列,awk,Awk,我有一张大桌子。我想保留前四列,但之后只打印第四列 我试过了 awk -v OFS="\t" '{ for(i=1;i<=NF;i++){ if(i<=4) print $0 else if(i>4 && (i%4)==0)
awk -v OFS="\t" '{
for(i=1;i<=NF;i++){
if(i<=4)
print $0
else if(i>4 && (i%4)==0)
print $i
}
}'
awk-vofs=“\t”{
对于(i=1;i试试这个:
hzhang@dell-work ~ $ cat sample.csv
1,2,3,4,5,6,7,8,9,10,11,12,13
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
1,2,3,4,5,6,7,8,9,10,11,12,13
hzhang@dell-work ~ $ cat test.awk
BEGIN{
FS=",";
OFS="\t"
}
{
str = "";
counter = 0;
for(i=1; i<=NF; i++){
if(i <= 3 || i % 4 == 0){
counter += 1
if(counter < 3 + NF/4 - 1){
str = str $i OFS
}else{
str = str $i
}
}
};
print str
}
hzhang@dell-work ~ $ awk -f test.awk sample.csv
1 2 3 4 8 12
1 2 3 4 8 12 16
1 2 3 4 8 12
hzhang@dell-工作~$cat sample.csv
1,2,3,4,5,6,7,8,9,10,11,12,13
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
1,2,3,4,5,6,7,8,9,10,11,12,13
hzhang@dell-work ~$cat test.awk
开始{
FS=“,”;
OFS=“\t”
}
{
str=“”;
计数器=0;
对于(i=1;i借用@haifzhan的输入文件,并在输出中使用;
s而不是制表符,以便您可以看到OFSs出现的位置:
$ cat file
1,2,3,4,5,6,7,8,9,10,11,12,13
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
1,2,3,4,5,6,7,8,9,10,11,12,13
$ cat tst.awk
BEGIN { FS=","; OFS=";" }
{
for (i=1;i<=NF;i++) {
if ( i<5 || !(i%4) ) {
printf "%s%s", (i>1?OFS:""), $i
}
}
print ""
}
$ awk -f tst.awk file
1;2;3;4;8;12
1;2;3;4;8;12;16
1;2;3;4;8;12
$cat文件
1,2,3,4,5,6,7,8,9,10,11,12,13
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
1,2,3,4,5,6,7,8,9,10,11,12,13
$cat tst.awk
开始{FS=“,”OFS=“;”}
{
对于(i=1;i要避免脚本中的大量测试,请尝试:
awk -F, '{
printf "%s\t%s\t%s",$1,$2,$3
for(i=4;i<=NF;i+=4)
printf "\t%s",$i
print ""
}' file
awk-F,'{
printf“%s\t%s\t%s”、$1、$2、$3
对于(i=4,iCange <代码>打印0美元<代码> <代码>打印$i < /Case>工作,但在一列中水平打印所有东西!列是垂直的。行是水平的。您想要哪一个?张贴一些示例输入和预期输出总是非常有用的。-您可以使用类似于final\u fld=NF-(NF%4)
的内容计算要打印的final字段,然后使用它来限制循环,并在使用三元运算符构造str
时决定何时追加OFS
。