我使用awk使用两个不同的字段分隔符交换文件名中的字段。 我想知道是否可以保留两个分隔符,' /'和' _',在输出中的正确位置。
示例:
我想改变这个:
/路径/到/的 example_file _123.txt
进入这个:
/路径/到/的 file_example _123.txt
我试过了:
awk -F "[/_]" '{ t=$3; $3=$4; $4=t;print}' file.txt
但输出中缺少字段分隔符:
path to file example 123.txt
我尝试过保留字段分隔符:
awk -F "[/_]" '{t=$3; $3=$4; $4=t; OFS=FS; print}' file.txt
但我明白了:
[/_]path[/_]to[/_]file[/_]example[/_]123.txt
当您处理多个分隔符时,有没有办法在awk中保留正确的原始字段分隔符?
答案 0 :(得分:1)
这是一个解决方案:
awk -F/ '{n=split($NF,a,"_");b=a[1];a[1]=a[2];a[2]=b;$NF=a[1];for (i=2;i<=n;i++) $NF=$NF"_"a[i]}1' OFS=/ file
/path/to/file_example_123.txt
答案 1 :(得分:1)
您可以随时使用Perl。
假设:
$ echo $e
/path/to/example_file_123.txt
然后:
$ echo $e | perl -ple 's/([^_\/]+)_([^_\/]+)/\2_\1/'
/path/to/file_example_123.txt
答案 2 :(得分:0)
$ cat /tmp/1
/path/to/example_file_123.txt
/path/to/example_file_345.txt
$ awk -F'_' '{split($1,a,".*/"); gsub(a[2],"",$1);print $1$2"_"a[2]"_"$3}' /tmp/1
/path/to/file_example_123.txt
/path/to/file_example_345.txt