复制 awk 的模式并将其粘贴到下一行

复制 awk 的模式并将其粘贴到下一行

我的文件夹中有很多txt文件。每个文件包含一行这种格式;

8852 0.53451 0.55959 0.65494 0.36047

我想在下一行添加一个固定数字,其余 4 列从原始行复制,如下所示

8852 0.53451 0.55959 0.65494 0.36047

9997 0.53451 0.55959 0.65494 0.36047

到目前为止,我设法通过文件夹内的以下命令添加 9997

find *.txt -exec sh -c 'echo "9997" >> $0' {} \;

并设法复制其余 4 列

for files in .; do awk '{$1=""; print substr($0,2)}' *.txt;done

但它在输出中打印出来,而不是在每个文件的下一行中打印出来。

我还没能把它们放在一起,感觉我已经很接近了,但可能方向错了。我尝试了 awk '{print "\n"$2,$3,$4,$5}' 但它也不起作用。

任何帮助表示赞赏!谢谢。

答案1

我建议awk '{print; $1 = 9997; print}'

$ echo '8852 0.53451 0.55959 0.65494 0.36047' | awk '{print; $1 = 9997; print}'
8852 0.53451 0.55959 0.65494 0.36047
9997 0.53451 0.55959 0.65494 0.36047

您提到将转换应用于多个文件:您可以使用循环来执行此操作

for f in *.txt; do  awk '{print; $1 = 9997; print}' "$f"; done

或(递归地)使用find

find . -name '*.txt' -exec awk '{print; $1 = 9997; print}' {} \;

但是,除非您有带有扩展名的最新版本的 GNU Awk -i inplace,否则结果将被连接并写入标准输出。

答案2

给定你的评论如果您要更新文件in this directory and other directories next to it.,假设您有一个目录,该目录下还有其他目录,其中有您要修改的文件。这是在 cd 到该顶级目录后执行此操作的方法:

find . -maxdepth 2 -mindepth 2 -exec awk -i inplace '{print} $1==8852{$1=9997; print}' {} +

上面使用 GNU awk 进行“就地”编辑,并使用 GNU find 进行+.如果您没有 GNU 工具,假设您的文件名不包含换行符:

tmp=$(mktemp)
while IFS= read -r file; do
    awk '{print} $1==8852{$1=9997; print}' "$file" > "$tmp" &&
    mv "$tmp" "$file"
done < <(find . -maxdepth 2 -mindepth 2) )
rm -f "$tmp"

如果您不想更改不包含8852以下内容的文件的时间戳:

tmp=$(mktemp)
while IFS= read -r file; do
    awk '$1==8852{f=1; exit} END{exit !f}' "$file" &&
    awk '{print} $1==8852{$1=9997; print}' "$file" > "$tmp" &&
    mv "$tmp" "$file"
done < <(find . -maxdepth 2 -mindepth 2) )
rm -f "$tmp"

答案3

因此,您有很多文件,并且它们有一行采用以下格式。

8852 0.53451 0.55959 0.65494 0.36047

现在您想要打开文件并将第一列替换为您选择的值,其余部分保持原样,然后将其附加到下一行。

8852 0.53451 0.55959 0.65494 0.36047

9997 0.53451 0.55959 0.65494 0.36047

如果我正确回答了这个问题,那么下面的内容应该有效。

for file in ``find . -name "*.txt"``; do awk '{print "\n9997 "$2,$3,$4,$5}' $file >> $file; done

获取文件夹中的所有文件,使用 awk 读取文件并获取 2345 列,并为第一列添加您的值并将其附加到同一文件中。

如果我问错了你的问题,我深表歉意。

相关内容