Shell 在两个单词之间应用最长空格无效

Shell 在两个单词之间应用最长空格无效,shell,awk,Shell,Awk,我试图找到文件中两个单词之间最长的空格,然后将该最长空格应用于每个小节的每个空格。只有空格,没有选项卡。我的文件包含以下内容: $ cat file1 firstCol secondCol blablablablablaetcetc secondCol test123 12231blablablabla test123 againtest123testbla blablatest againblabla

我试图找到文件中两个单词之间最长的空格,然后将该最长空格应用于每个小节的每个空格。只有空格,没有选项卡。我的文件包含以下内容:

$ cat file1
firstCol     secondCol
blablablablablaetcetc    secondCol
test123                    12231blablablabla
test123         againtest123testbla
blablatest            againblabla 
以下是我尝试过的,但不起作用

awk -v OFS="\t" '{print $0}' file1
预期产量

firstCol                    secondCol
blablablablablaetcetc                    secondCol
test123                    12231blablablabla
test123                    againtest123testbla
blablatest                    againblabla

请您尝试使用GNU
awk
中显示的样本编写并测试以下内容。我希望这就是你想要的:)

输出将如下所示

firstCol                    secondCol
blablablablablaetcetc                    secondCol
test123                    12231blablablabla
test123                    againtest123testbla
blablatest                    againblabla

这里有一个单程
awk

awk'{r[FNR]=$0}match($0,/[:blank:]+/)和&RLENGTH>max{max=RLENGTH;sp=substr($0,RSTART,RLENGTH)}END{for(i=1;r中的i;++i){sub sub(/[:blank:]+/,sp,r[i]);print r[i]}file1
第一列第二列
BlaetCetc第二个Col
test123 12231blabla
test123 againtest123testbla
阿金布拉布拉
可读形式:

awk'{
r[FNR]=0美元
}
匹配($0,/[:blank:]+/)&长度>最大值{
最大长度=R长度
sp=substr($0,RSTART,RLENGTH)
}
结束{
对于(i=1;r中的i;++i){
sub(/[:blank:]+/,sp,r[i])
打印r[i]
}
}'文件1

假设第一列始终从第一个字符开始,并且第二列末尾没有空格:

awk '(NR==FNR){c=length - length($1) - length($2); if(c>m) m=c; next}
     (FNR==1) { s=sprintf("%*.s",m,"") }
     { print $1 s $2 }' file file
你可以试试这个:

awk 'NR==FNR{match($0, /[ \t]+/, a);\
             if(max<length(a[0]))\
                 max=length(b=a[0])\
            }\
      NR!=FNR{\
        print gensub(/[ \t]+/, b, 1)\
      }' file1 file1

您可能希望在流程中添加
expand
,以确保“空格”是统一的空格,而不是制表符和空格…@dawg,是的,昨天已经讨论过了,OP提到没有制表符,只有空格,不确定此处是否删除了注释:)谢谢。那也行!
awk 'NR==FNR{match($0, /[ \t]+/, a);\
             if(max<length(a[0]))\
                 max=length(b=a[0])\
            }\
      NR!=FNR{\
        print gensub(/[ \t]+/, b, 1)\
      }' file1 file1
firstCol                    secondCol
blablablablablaetcetc                    secondCol
test123                    12231blablablabla
test123                    againtest123testbla
blablatest                    againblabla