需要删除文件每三行中的最后一列

时间:2015-10-23 22:13:19

标签: linux bash awk sed

到目前为止,我有以下代码允许我遍历文件并识别每个文件的第三行。但是,我想删除每三行的最后一列,但是我在编写语法时遇到了问题:

s.total <=> p->total or (*p).total

我打开使用awk,但我不确定如何在文件中的一行内联。如果可以使用整个文件上的参数来完成,那就没问题了。

此外,如果可以被3行整除,则只包含一个字段,也应删除该字段。永远不会存在空白行。

示例输入:

#!/bin/bash

counter=1
lines=$(wc -l < 'test_file')
echo $lines

while read line; do
        if (( $counter % 3 == 0 )); then
                #Need a good one liner here to solve the problem!
        else
                echo "$line is not a multiple of three."
        fi
        ((counter = counter + 1))
done < 'test_file'

示例输出:

my dog smells
my cat bites
my fish swims
a b c
d e f
g h i

2 个答案:

答案 0 :(得分:2)

awk更容易处理这类任务:

 awk 'NR%3==0{NF--}7' file

让我们做一点测试:

kent$  cat f
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d

kent$  awk 'NR%3==0{NF--}7' f
a b c d
a b c d
a b c
a b c d
a b c d
a b c
a b c d
a b c d
a b c
a b c d

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed '3~3s/\s\S\+$//' file