我有一个包含5列的txt文件。我想删除文件中的最后一列并创建一个新文件。新文件应该具有旧文件的前4列。
此外文件很大,10M记录。那么命令可以在后台运行吗?如果不可能则那么罚款。
输入:
ID details2 details3 details4 details5
输出:
ID details2 details3 details4
答案 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
答案 2 :(得分:0)
这将删除最后一列,无论您的输入文件有多少列:
awk 'NF--' inputfile >outputfile