我正在尝试在输入文本的第一列中更改两个字符,并在这种情况下为多个文件-250进行更改,使用awk
但我收到错误。我的水平是初学者,所以我开始没有包含多个文件,仅从单个文件开始。
输入文字:* .xyz
6 -2.163968 -0.214364 0.000000
1 -1.578434 -2.353198 0.000000
1 1.575214 2.351350 0.000000
6 -4.697660 0.932898 0.000000
1 -3.168017 3.994185 0.000000
1 -5.599375 2.978998 0.000000
因此文本将在第一列中具有不同的字符,如6或1或更多,我想只替换那些C为6和H为1.我尝试更改所有数字6和1或只是打印错误。
awk -F, -vOFS=, '{for(n=1;n<=1;n++)sub(/\6/,"C",$1)}1' *.xyz
awk ' NF >= 4 { $(NF - 3) = "sub(/\C,"6",$1)"; print; }' *.xyz
哪个不起作用。
我需要改变什么?
答案 0 :(得分:2)
<强>计划强>
- 使用sed就地替换这些字段
注意1.xyz和2.xyz包含与发布的相同内容
<强> replace_first.sh 强>
#!/bin/bash
for i in ./*.xyz;
do
printf "processing $i\n";
sed -i -e 's/^1\(\s\)/H\1/g' \
-e 's/^6\(\s\)/C\1/g' "$i";
done;
<强>输出强>
$ ./replace_first.sh
processing ./1.xyz
processing ./2.xyz
$ cat 1.xyz
C -2.163968 -0.214364 0.000000
H -1.578434 -2.353198 0.000000
H 1.575214 2.351350 0.000000
C -4.697660 0.932898 0.000000
H -3.168017 3.994185 0.000000
H -5.599375 2.978998 0.000000
$ cat 2.xyz
C -2.163968 -0.214364 0.000000
H -1.578434 -2.353198 0.000000
H 1.575214 2.351350 0.000000
C -4.697660 0.932898 0.000000
H -3.168017 3.994185 0.000000
H -5.599375 2.978998 0.000000
答案 1 :(得分:0)
awk '{ if( $1 == 6 ) $1 = "C"; else $1 = "H"; print}' *.xyz
如果空间分隔符很重要
awk '{ sub( /^6/, "C");sub( /^1/, "H"); print}' *.xyz