我有一个仅包含整数的空格分隔文件。每一行都有不同数量的整数从1开始。是否有一种方法可以使用单个线程的awk,sed,grep或任何组合来实际创建另一个文件,这个文件将完全相同,所有整数减少一个?此文件中也没有空行。
输入文件示例:
2 3 4 5 6 7
1 3 5
输出文件示例:
1 2 3 4 5 6
0 2 4
答案 0 :(得分:4)
你可以试试这个awk命令,
awk '{for(i=1;i<=NF;i++){$i=$i-1}}1' infile > outfile
示例:强>
$ cat file
2 3 4 5 6 7
1 3 5
4 4 5
$ awk '{for(i=1;i<=NF;i++){$i=$i-1}}1' file
1 2 3 4 5 6
0 2 4
3 3 4
答案 1 :(得分:2)
您可以通过将文件的每一行读入数组来在Bash循环中执行此操作。
while read -ra line; do
for i in ${!line[@]}; do
let line[$i]--
done
echo ${line[@]}
done < file > output_file
答案 2 :(得分:1)
for DD in $(cat your_input_file|tr " " ",")
do
for x in $(echo $DD | tr "," " ")
do
let m=$x-1
echo -n " $m" >>your_output_file
done
echo >>your_output_file
done
但@Avinash Raj的建议更好
答案 3 :(得分:1)
perl
版本:
perl -pe 's/(\d+)/$1-1/eg' file
1 2 3 4 5 6
0 2 4
<强>解释强>
-p
假设while (<>) { ... }
循环播放程序并打印该行,如sed。-e
执行代码s/(\d+)/$1-1/eg
是一个简单的替换,我们将每个数字分组并对其执行减法。 e
标志评估替换。 g
标志执行全局替换。