如何使用bash脚本将列数据转换为行数据并创建csv文件
在文本文件中有一些数据(输入数据),我想在CSV文件中转换。如何在bash脚本中创建以下格式如何使用bash脚本将列数据转换为行数据并创建csv文件,bash,shell,awk,Bash,Shell,Awk,在文本文件中有一些数据(输入数据),我想在CSV文件中转换。如何在bash脚本中创建以下格式 输入数据 a=1 b=2 c=3 d=4 输出数据(CSV文件数据) a、 b、c、d 1,2,3,4 无阵列 i=0 while IFS='=' read -r key value do echo "$key" echo "$value" echo "$i" i=$((i+1)) done < "stats.txt" i=0 而IFS='='
- 输入数据
- a=1
- b=2
- c=3
- d=4
- 输出数据(CSV文件数据)
- a、 b、c、d
- 1,2,3,4
无阵列
i=0
while IFS='=' read -r key value
do
echo "$key"
echo "$value"
echo "$i"
i=$((i+1))
done < "stats.txt"
i=0
而IFS='='读取-r键值
做
回显“$key”
回显“$value”
回音“$i”
i=$((i+1))
完成<“stats.txt”
使用阵列:
i=0
j=0
while IFS='=' read -r key value
do
echo arrayKey[`$i`]="$key"
echo arrayVal[`$j`]="$value"
i=`$((i+1))`
j=`$((j+1))`
done < status.txt
i=0
j=0
而IFS='='读取-r键值
做
echo arrayKey[`i`]=“$key”
echo arrayVal[`$j`]=“$value”
i=`$((i+1))`
j=`$((j+1))`
完成
行被处理成数组
@d
,其中包含字段([a,1],[b,2]…)
。之后,在由}{
开始的结束块中,对于所有(两个)索引,使用map
提取每个arrayref中相同索引处的元素,并与,
连接
这就像构建和转换矩阵
如果给出了更多的数据,如a=1,10100
(或a=11000
),则可以使用split/\s*[=,]\s*/
(或使用/\s*[=\s]\s*/
模式),其余代码保持不变
在没有显式循环的情况下,我无法找到提取所有相同索引切片(“列”)的方法。在awk中:
$ awk ' # awk it is
BEGIN { FS="=";OFS=",";start=1 } # separators
NR>=start && $0!="" { # define start line and remove empties
# sub(/\r/,"",$NF) # uncomment to remove windows line endings
for(i=1;i<=NF;i++) # all cols
a[i]=a[i] (NR==start?"":OFS) $i # gather
}
END { # in the end
for(j=1;j<i;j++) # all ..
print a[j] # outputed
}' file
a,b,c,d
1,2,3,4
$awk'#是啊
BEGIN{FS=“=”OFS=“,”start=1}分隔符
NR>=start&&$0!=''{#定义起始行并删除空的
#sub(/\r/,“”,$NF)#取消注释以删除windows行结尾
对于(i=1;我想你试过了吗?如果它应该是一个bash脚本,那么perl标记在这个问题上做了什么?你在这个网站上提出的所有问题都被否决了。我建议你做一个测试,学习更好的问题。Anubhava,我有一些代码,比如下面一个i=0 j=0,而IFS='='read-r键值do echo arrayKey[0][$i]=“$key”echo arrayVal[1][$j]=“$value”i=$((i+1))j=$((j+1))已完成将其编辑到您的问题中,我们将重新注释。这是如何支持不良行为的?(我认为是-1)你为什么不投票提前结束,就像我一直做的那样,这样我们就不会有问题了。++@JamesBrown谢谢你的支持。我没有认真对待这个问题(它只是要求代码,这就是为什么答案不友好的原因)。我只是不理解投票结果。我对我发布的内容唯一的不满是,我没有成功地将所有切片都进行循环。如何从文件中删除或跳过第一列更改varstart
的值。当我试图在生产中执行相同的代码时。数据没有得到转换。你能建议一下吗。这真的很难说仅基于该错误描述。请更具体。如果生产中的数据不同,请发布。描述环境和awk版本等。相同的脚本,相同的数据,相同的文件名,但在生产it 3.1.7和本地4.1.4上有两个不同的环境。是否有任何主要的差异b/w 2版本。我无法更新服务器,因为它使用了我的多个应用程序激动。
$ awk ' # awk it is
BEGIN { FS="=";OFS=",";start=1 } # separators
NR>=start && $0!="" { # define start line and remove empties
# sub(/\r/,"",$NF) # uncomment to remove windows line endings
for(i=1;i<=NF;i++) # all cols
a[i]=a[i] (NR==start?"":OFS) $i # gather
}
END { # in the end
for(j=1;j<i;j++) # all ..
print a[j] # outputed
}' file
a,b,c,d
1,2,3,4