我在一个变量中有一个元素数组。我必须将数组的所有值打印到一个文件中。最初,我使用 sed和cut 从许多文件中读取数组的值。我已将这些值(数组)打印到文件中。当我在循环中使用print语句时,值将被覆盖。有没有其他方法可以使用awk或cat等命令将所有元素打印到文件中 这是我试过的代码
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
G=${GPArr[$GPCount]}
G="$(sed -n '2p' $file.txt|cut -d" " -f7)"
printf "%d\n" "$G" >$out.txt
done
我知道如果我在循环中使用它会覆盖,所以我尝试了另一个代码块
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
$GPArr[$GPCount]="$(sed -n '2p' $file.txt|cut -d" " -f7)"
done
printf "%d\n" "${GPArr[@]}" >$out2.txt
没有输出而且我收到错误(它给出了值,但它无法将sed o / p指向数组变量
./test.sh: line 33: =33: command not found
./test.sh: line 33: =39: command not found
./test.sh: line 33: =45: command not found
如果我像这样修改代码
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
G="$(sed -n '2p' $file.txt|cut -d" " -f7)"
done
printf "%d\n" "${GPArr[@]}" >$out2.txt
我在文本文件中输出0作为输出。我需要在我的文本文件中使用这样的o / p
33
39
45
请在这方面帮助我。提前致谢
答案 0 :(得分:3)
Private Sub UserForm_Initialize()
ComboBox1.List = Worksheets("Sheet1").Range("A23:A30").Value
End Sub
Private Sub ComboBox1_Change()
TextBox1.Text = Application.VLookup(ComboBox1.Value, Worksheets("sheet1").Range("A23:B27"), 2, False)
End Sub
或
printf "%d\n" "$G" >>$out.txt
echo "$G" >>$out.txt
会覆盖整个文件,而>
会附加到文件
用法:
>>
答案 1 :(得分:0)
完成任务的最简单方法是使用bash
内置printf
命令。注意:这是bash
内置printf
,而不是/usr/bin/printf
。
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
printf -v GPArr[$GPCount] "%d" $(sed -n '2p' $file.txt|cut -d" " -f7)
done
printf "%d\n" "${GPArr[@]}" >$out2.txt
试一试。
答案 2 :(得分:0)
您的第一个循环失败,因为您似乎尝试将G
用作${GPArr[$GPCount]}
的别名。 bash
变量不会以这种方式工作(尽管在bash
4.3中,您可以声明一个 nameref ,它可以工作:
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
declare -n G=${GPArr[$GPCount]}
G="$(sed -n '2p' $file.txt|cut -d" " -f7)"
printf "%d\n" "$G"
done > "$out.txt"
另外,请确保每次循环都不会覆盖文件$out.txt
。
)
你的第二个循环只是一个错字;你不要在变量赋值前加上美元符号。
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
# Not $GPArr[$GPCOUNT]=...
GPArr[$GPCount]="$(sed -n '2p' $file.txt|cut -d" " -f7)"
done
printf "%d\n" "${GPArr[@]}" >$out2.txt
顺便说一下,你根本不需要一个循环计数器;您可以使用+=
运算符附加到数组。
for ((GPCount=0; GPCount< $GPCnt; GPCount++))
do
# Not $GPArr[$GPCOUNT]=...
GPArr+=("$(sed -n '2p' $file.txt|cut -d" " -f7)")
done
printf "%d\n" "${GPArr[@]}" >$out2.txt
(无论如何,每次通过循环时sed
调用如何产生不同的值都不清楚。)