Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用awk更改基于其他纺织品的文本文件_String_Awk - Fatal编程技术网

String 使用awk更改基于其他纺织品的文本文件

String 使用awk更改基于其他纺织品的文本文件,string,awk,String,Awk,我有一个文本文件,它包含一组随机数。在第二个文件中,另一组随机数包括第一个文件中的数字。只要这些数字匹配,我就需要进行编辑 文件b 1 5 7 9 归档 1 100 100 100 4 100 100 100 5 100 100 100 7 100 100 100 8 100 100 100 9 100 100 100 11 100 100 100 12 100 100 100 输出 1 10000 10000 10000 4 100 100 100 5 10000 10000 10000

我有一个文本文件,它包含一组随机数。在第二个文件中,另一组随机数包括第一个文件中的数字。只要这些数字匹配,我就需要进行编辑

文件b

1
5
7
9
归档

1 100 100 100
4 100 100 100
5 100 100 100
7 100 100 100
8 100 100 100
9 100 100 100
11 100 100 100
12 100 100 100
输出

1 10000 10000 10000
4 100 100 100
5 10000 10000 10000
7 10000 10000 10000
8 100 100 100
9 10000 10000 10000
11 100 100 100
12 100 100 100
我尝试了以下方法:

awk 'NR==FNR{a[NR]=$1;next} {    
    while(getline && end=="") {
        if (a[FNR]==$1){
            end=1;
            print $1, $2,"00", $3,"00",$4,"00"
        }else{
            print $1, $2, $3, $4
        }
    }         
}' b.inp a.inp > new.inp
但是,当我使用getline时,我尝试在两个文件中滚动一行代码。因此,我永远无法匹配。我需要它只滚动第二个文件中的行,而我使用循环。
任何帮助都将不胜感激

请您尝试以下内容,并让我知道这是否对您有帮助

awk  'FNR==NR{a[$0];next} ($1 in a){for(i=2;i<=NF;i++){$i="10000"}} 1' fileb filea
awk'FNR==NR{a[$0];next}($a中的1){for(i=2;i temp_文件和&mv temp_文件输入_文件
awk会自动逐行读取您的文件,因此无需调用
getline

只需将
fileb
中的键保存在一个数组中,然后在
filea
的第一列匹配时,将倒数第二列的值乘以100:

awk 'NR == FNR { lines[$0]; next } 
$1 in lines { for (col = 2; col <= NF; ++col) $col *= 100 } 1' fileb filea
awk'NR==FNR{lines[$0];next}

$1行{for(col=2;col这是使用getline的方式。它实际上会为第二个文件保存不必要的if语句(如果您关心这个小的性能更改)


awk'开始{while(GetLineIt只匹配9。@RaymondHaffarianshirazi,请您检查一下
cat-v文件A
cat-v文件B
?似乎您的文件可能是回车符?如果是,请执行
tr-d'\r'
删除它们,然后请检查并让我知道?如果您有机会,请阅读考虑将来使用getline。这不是使用getline的方法,使用getline是解决此类问题的错误方法。请参阅。
awk 'NR == FNR { lines[$0]; next } 
$1 in lines { for (col = 2; col <= NF; ++col) $col *= 100 } 1' fileb filea
awk 'BEGIN{while( getline line<"fileb" ) {a[line]} 
($1 in a) { for (col = 2; col <= NF; ++col) $col *= 100 } 1' filea