Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
bash for循环不循环(awk、bash、linux)_Linux_Bash_Awk - Fatal编程技术网

bash for循环不循环(awk、bash、linux)

bash for循环不循环(awk、bash、linux),linux,bash,awk,Linux,Bash,Awk,下面是一个示例数据集(10列,2行): 当前输出的文件包括: voxTim_KC_1_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_2_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_3_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_4_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_5_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_1_8?1?4?10?7?9?2?3?6?5.1D vox

下面是一个示例数据集(10列,2行):

当前输出的文件包括:

voxTim_KC_1_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_2_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_3_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_4_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_5_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_1_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_2_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_3_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_4_8?1?4?10?7?9?2?3?6?5.1D voxTim_KC_5_8?1?4?10?7?9?2?3?6?5.1D 每个文件包含10个值,表示循环不正确

我想要的是:

voxTim_KC_1_1.1D, voxTim_KC_1_2.1D, voxTim_KC_1_3.1D..... voxTim_KC_2_1.1D, voxTim_KC_2_2.1D, voxTim_KC_2_3.1D..... and so on.. voxTim_KC_1_1.1D、voxTim_KC_1_2.1D、voxTim_KC_1_3.1D。。。。。 voxTim_KC_2_1.1D、voxTim_KC_2_2.1D、voxTim_KC_2_3.1D。。。。。 等等
谢谢大家!

awk
救援

您可以更有效地使用
awk
,例如,此脚本将从每个输入文件中提取两个值,并使用数据创建10个(或实际列数)文件

 $ awk 'FNR==1{c++; n=split($0,r1); next} 
        FNR==2{split($0,r2); 
              for(i=1;i<=n;i++) print r2[i] > "file."c"."r1[i]".1D"}' input1 input2
和内容

$ tail -n 2 file.1*
==> file.1.1.1D <==
10.001

==> file.1.10.1D <==
30.5

==> file.1.2.1D <==
61.25

==> file.1.3.1D <==
71.5

==> file.1.4.1D <==
20.25

etc...
$tail-n2文件。1*

==>file.1.1.1D file.1.10.1D file.1.2.1D file.1.3.1D file.1.4.1D
awk
救命

您可以更有效地使用
awk
,例如,此脚本将从每个输入文件中提取两个值,并使用数据创建10个(或实际列数)文件

 $ awk 'FNR==1{c++; n=split($0,r1); next} 
        FNR==2{split($0,r2); 
              for(i=1;i<=n;i++) print r2[i] > "file."c"."r1[i]".1D"}' input1 input2
和内容

$ tail -n 2 file.1*
==> file.1.1.1D <==
10.001

==> file.1.10.1D <==
30.5

==> file.1.2.1D <==
61.25

==> file.1.3.1D <==
71.5

==> file.1.4.1D <==
20.25

etc...
$tail-n2文件。1*
==>file.1.1.1D file.1.10.1D file.1.2.1D file.1.3.1D file.1.4.1D仅使用bash:

subj=KC
for j in {1..5}; do
    {
        read -ra a     # read the 1st line into array 'a'
        read -ra b     # read the 2nd line into array 'b'
        for i in {0..9}; do
            echo "${b[i]}" > "voxTim_${subj}_${j}_${a[i]}.1D"
        done
    } < "OrderTimes${subj}_voxel_tuning_${j}.txt"
done
subc=KC
对于j in{1..5};做
{
read-ra a#将第一行读入数组“a”
read-ra b#将第2行读入数组“b”
因为{0..9}中的i;do
echo“${b[i]}>“voxTim{subj}{j}{a[i]}.1D”
完成
}<“OrderTimes${subj}\u体素\u调谐${j}.txt”
完成
仅使用bash:

subj=KC
for j in {1..5}; do
    {
        read -ra a     # read the 1st line into array 'a'
        read -ra b     # read the 2nd line into array 'b'
        for i in {0..9}; do
            echo "${b[i]}" > "voxTim_${subj}_${j}_${a[i]}.1D"
        done
    } < "OrderTimes${subj}_voxel_tuning_${j}.txt"
done
subc=KC
对于j in{1..5};做
{
read-ra a#将第一行读入数组“a”
read-ra b#将第2行读入数组“b”
因为{0..9}中的i;do
echo“${b[i]}>“voxTim{subj}{j}{a[i]}.1D”
完成
}<“OrderTimes${subj}\u体素\u调谐${j}.txt”
完成

您的循环没有按照您的想法进行,因为您混淆了awk和shell,并且误解了shell引用规则,但更重要的是,无论您尝试做什么,您的方法都是错误的,请解释您尝试做什么,以及一些具体的、可测试的示例输入和预期的输出,我们可以帮助您。如果/当您得到一个答案,告诉您如何使您现有的脚本生成您期望的输出时,请记住这是错误的方法。您的循环没有按照您的想法进行,因为您混淆了awk和shell,并且误解了shell引用规则,但更重要的是,无论您尝试做什么,您的方法是错误的。请解释您试图做什么,以及一些具体的、可测试的示例输入和预期输出,我们可以帮助您。如果/当您得到一个答案,告诉您如何使现有脚本生成您期望的输出时,请记住这是错误的方法。
echo
在这里可能没问题,但是
echo“$…”
在某些情况下可能会做错误的事情
printf“%s\n'”$…“
始终是安全的。如果
x=-n
echo“$x”
只打印
printf“%s\n'”$x“
prints'-n”。同样的情况也发生在
-e
-e
上。此外,如果设置了
xpg\u echo
,则
echo
参数中的反斜杠转义序列将被展开。
echo
在这里可能是正常的,但是
echo“$…”
在某些情况下可能会做错误的事情
printf“%s\n'”$…“
始终是安全的。如果
x=-n
echo“$x”
只打印
printf“%s\n'”$x“
prints'-n”。同样的情况也发生在
-e
-e
上。此外,如果设置了
xpg\u echo
,则
echo
参数中的反斜杠转义序列将展开。
$ tail -n 2 file.1*
==> file.1.1.1D <==
10.001

==> file.1.10.1D <==
30.5

==> file.1.2.1D <==
61.25

==> file.1.3.1D <==
71.5

==> file.1.4.1D <==
20.25

etc...
$ awk 'FNR==1{c++; n=split($0,r1)} 
       FNR==2{for(i=1;i<=n;i++) print $i > ("file."c"."r1[i]".1D")}' input1 input2
subj=KC
for j in {1..5}; do
    {
        read -ra a     # read the 1st line into array 'a'
        read -ra b     # read the 2nd line into array 'b'
        for i in {0..9}; do
            echo "${b[i]}" > "voxTim_${subj}_${j}_${a[i]}.1D"
        done
    } < "OrderTimes${subj}_voxel_tuning_${j}.txt"
done