awk:保留多个字段分隔符
awk: Preserve multiple field separators
我正在使用 awk 使用两个不同的字段分隔符交换文件名中的字段。
我想知道是否可以在输出的正确位置保留两个分隔符“/”和“_”。
示例:
我想改变这个:
/path/to/example_file_123.txt
进入这个:
/path/to/file_example_123.txt
我试过:
awk -F "[/_]" '{ t=; =; =t;print}' file.txt
但输出中缺少字段分隔符:
path to file example 123.txt
我试过保留字段分隔符:
awk -F "[/_]" '{t=; =; =t; OFS=FS; print}' file.txt
但我明白了:
[/_]path[/_]to[/_]file[/_]example[/_]123.txt
当您处理多个分隔符时,有没有办法在 awk 中保留正确的原始字段分隔符?
这是一种解决方案:
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
$ cat /tmp/1
/path/to/example_file_123.txt
/path/to/example_file_345.txt
$ awk -F'_' '{split(,a,".*/"); gsub(a[2],"",);print "_"a[2]"_"}' /tmp/1
/path/to/file_example_123.txt
/path/to/file_example_345.txt
您可以随时使用 Perl。
鉴于:
$ echo $e
/path/to/example_file_123.txt
然后:
$ echo $e | perl -ple 's/([^_\/]+)_([^_\/]+)/_/'
/path/to/file_example_123.txt
我正在使用 awk 使用两个不同的字段分隔符交换文件名中的字段。 我想知道是否可以在输出的正确位置保留两个分隔符“/”和“_”。
示例:
我想改变这个:
/path/to/example_file_123.txt
进入这个:
/path/to/file_example_123.txt
我试过:
awk -F "[/_]" '{ t=; =; =t;print}' file.txt
但输出中缺少字段分隔符:
path to file example 123.txt
我试过保留字段分隔符:
awk -F "[/_]" '{t=; =; =t; OFS=FS; print}' file.txt
但我明白了:
[/_]path[/_]to[/_]file[/_]example[/_]123.txt
当您处理多个分隔符时,有没有办法在 awk 中保留正确的原始字段分隔符?
这是一种解决方案:
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
$ cat /tmp/1
/path/to/example_file_123.txt
/path/to/example_file_345.txt
$ awk -F'_' '{split(,a,".*/"); gsub(a[2],"",);print "_"a[2]"_"}' /tmp/1
/path/to/file_example_123.txt
/path/to/file_example_345.txt
您可以随时使用 Perl。
鉴于:
$ echo $e
/path/to/example_file_123.txt
然后:
$ echo $e | perl -ple 's/([^_\/]+)_([^_\/]+)/_/'
/path/to/file_example_123.txt