如何删除文件每行中以空格分隔的最后 3 个数字 - 并删除除上述三个数字之外的所有内容

如何删除文件每行中以空格分隔的最后 3 个数字 - 并删除除上述三个数字之外的所有内容

我需要分割包含此类型数据的文件;

Jazz Guitar 1 16 3 4
Carlos Guitar1 16 3 5
Overdrive Gtr1 16 3 6
Western Gtr&Whis 16 3 7
Pat Guitar Synth 16 3 8
Shadow Guitar 16 3 9
Clean El.Guitar 16 3 10
Overdrive Gtr2 16 3 11

分成 2 个文件 - 一个仅包含最后 3 个数字 - 另一个包含这些数字之前的所有内容,如下所示;

16 3 4
16 3 5
16 3 6
16 3 7
16 3 8
16 3 9
16 3 10
16 3 11

Jazz Guitar 1
Carlos Guitar1
Overdrive Gtr1
Western Gtr&Whis
Pat Guitar Synth
Shadow Guitar
Clean El.Guitar
Overdrive Gtr2

SED、AWK 或类似命令将会受到赞赏。

答案1

使用cut选择列,并将其与rev从右边计数相结合:

rev file | cut -d' ' -f1,2,3 | rev > file1
rev file | cut -d' ' -f4-    | rev > file2

答案2

GNU awk:

gawk '{print $(NF-2), $(NF-1), $NF > "file1"; NF -= 3; print > "file2"}' input

“file1” 将包含最后 3 列。
“file2” 将包含初始列。

也可以使用mawk。对于 MacOS 上的默认 awk,你必须执行

/usr/bin/awk '{
    print $(NF-2), $(NF-1), $NF > "file1"
    $(NF-2) = ""; $(NF-1) = ""; $NF  = ""
    print > "file2"
}' input

相关内容