剪切文件中的最后一列并在unix中创建新文件

时间:2018-04-30 16:57:36

标签: shell unix

我有一个包含5列的txt文件。我想删除文件中的最后一列并创建一个新文件。新文件应该具有旧文件的前4列。

此外文件很大,10M记录。那么命令可以在后台运行吗?如果不可能则那么罚款。

输入:

ID details2 details3 details4 details5

输出:

ID details2 details3 details4

3 个答案:

答案 0 :(得分:1)

假设输入文件中的数据列不包含任何空格,您可以这样做:

cut -d' ' -f1-4 input.txt > output.txt &

答案 1 :(得分:0)

如果您不需要保留原始文件,则会对其进行编辑以删除每行的最后一个单词:

ed file.txt <<'END'
1,$s/ [^ ]\+$//
wq
END

更新:不要使用此方法:时间如下。请注意,这是鱼壳,允许在单引号字符串中使用转义单引号

$ yes "ID details2 details3 details4 details5" | head -n 10000000 > file
$ wc file
 10000000  50000000 390000000 file
$ time sh -c 'printf "%s\\n" \'1,$s/ [^ ]\\+$//\' wq | ed file'
390000000
300000000
42.11user 34.21system 1:34.61elapsed 80%CPU (0avgtext+0avgdata 1407060maxresident)k
1366408inputs+1894576outputs (4major+351780minor)pagefaults 0swaps

$ yes "ID details2 details3 details4 details5" | head -n 10000000 > file
$ time sh -c 'cut -d" " -f1-4 file > file.new'
0.98user 0.39system 0:01.58elapsed 86%CPU (0avgtext+0avgdata 1700maxresident)k
480inputs+585944outputs (1major+154minor)pagefaults 0swaps
$ wc file file.new
 10000000  50000000 390000000 file
 10000000  40000000 300000000 file.new
 20000000  90000000 690000000 total

ed 1分34秒,cut

1.5秒

答案 2 :(得分:0)

这将删除最后一列,无论您的输入文件有多少列:

awk 'NF--' inputfile >outputfile