Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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
用文件名linux的一部分替换文件中的列_Linux_Replace_Find - Fatal编程技术网

用文件名linux的一部分替换文件中的列

用文件名linux的一部分替换文件中的列,linux,replace,find,Linux,Replace,Find,我有数千个文件,它们的名称如下: Track\u 0000000\u extract.txt 其中零可以替换为任何数值 #!/bin/sh for file in Track_*_extract.txt do num=${file#Track_} num=${num%_extract.txt} awk -v num=$num '{ $1=num; print }' < $file > $file.new done 这些文件的内容如下所示: 1 0 138.7

我有数千个文件,它们的名称如下:

Track\u 0000000\u extract.txt

其中零可以替换为任何数值

#!/bin/sh
for file in Track_*_extract.txt
do
    num=${file#Track_}
    num=${num%_extract.txt}
    awk -v num=$num '{ $1=num; print }' < $file > $file.new
done
这些文件的内容如下所示:

1 0 138.7936 26.4674 -1.517 7.225 0 1 95564.477 100997.425 267127.576 44.585 215803.887 
1 6 138.4649 27.8692 -2.318 4.902 0 1 96308.418 101000.391 240804.857 40.122 239866.492 
1 12 137.956 28.8204 -2.196 6.239 0 1 96602.983 100980.098 193555.58 43.644 227623.588 
1 18 137.4698 30.031 -2.734 6.457 0 1 96763.473 100962.086 189049.294 42.996 132256.485 
1 24 136.857 31.2838 -2.595 1.886 0 1 97331.108 100934.865 120323.785 39.545 177050.848 
1 30 136.2677 31.6498 -5.708 -2.484 0 1 97295.779 100920.752 144810.457 37.85 23238.046 
我想用文件名中的数字值替换每个文件第一列中的数字1。是否可以在linux shell中轻松地同时为我的数千个文件执行此操作

谢谢,
Kimberly

这将创建扩展名为
.new
的文件,其第一列由数值替换

#!/bin/sh
for file in Track_*_extract.txt
do
    num=${file#Track_}
    num=${num%_extract.txt}
    awk -v num=$num '{ $1=num; print }' < $file > $file.new
done
#/垃圾箱/垃圾箱
对于Track_*\u extract.txt中的文件
做
num=${file#Track}
num=${num%\u extract.txt}
awk-v num=$num'{$1=num;print}'<$file>$file.new
完成
如果您希望第一列中的数字仅在数字为1时才替换为数值-我不清楚您想要什么-请使用以下方法:

#!/bin/sh
for file in Track_*_extract.txt
do
    num=${file#Track_}
    num=${num%_extract.txt}
    awk -v num=$num '{ if ($1 == 1) { $1=num }; print }' < $file > $file.new
done
#/垃圾箱/垃圾箱
对于Track_*\u extract.txt中的文件
做
num=${file#Track}
num=${num%\u extract.txt}
awk-v num=$num'{if($1==1){$1=num};print}'<$file>$file.new
完成

这将创建扩展名为
.new
的文件,其第一列由数值替换

#!/bin/sh
for file in Track_*_extract.txt
do
    num=${file#Track_}
    num=${num%_extract.txt}
    awk -v num=$num '{ $1=num; print }' < $file > $file.new
done
#/垃圾箱/垃圾箱
对于Track_*\u extract.txt中的文件
做
num=${file#Track}
num=${num%\u extract.txt}
awk-v num=$num'{$1=num;print}'<$file>$file.new
完成
如果您希望第一列中的数字仅在数字为1时才替换为数值-我不清楚您想要什么-请使用以下方法:

#!/bin/sh
for file in Track_*_extract.txt
do
    num=${file#Track_}
    num=${num%_extract.txt}
    awk -v num=$num '{ if ($1 == 1) { $1=num }; print }' < $file > $file.new
done
#/垃圾箱/垃圾箱
对于Track_*\u extract.txt中的文件
做
num=${file#Track}
num=${num%\u extract.txt}
awk-v num=$num'{if($1==1){$1=num};print}'<$file>$file.new
完成
一行:

find -name 'Track*_extract.txt' | \
      cut -d_ -f2 | \
      xargs -n 1 -I @ sed -i 's!^[^ ]*!'@'!' Track_@_extract.txt 
一行:

find -name 'Track*_extract.txt' | \
      cut -d_ -f2 | \
      xargs -n 1 -I @ sed -i 's!^[^ ]*!'@'!' Track_@_extract.txt 

你的第一个建议非常适合我的情况。谢谢对于将来出现的问题,我将牢记这一点。对我来说,这似乎是一个常见的问题。谢谢你的第一个建议非常适合我的情况。谢谢对于将来出现的问题,我将牢记这一点。对我来说,这似乎是一个常见的问题。谢谢