将TXT转换为csv中的空行



我有很多这样的文件:

cat test.data
name1
...
nameN
title1
...
titleM
abstract1
...
abstractO
ID

,其中数字N,M,O因文件而异。但是在所有文件中,字段之间都用空行分隔。我想将这些数据转换成csv,每个文件转换成一行,其中包含行(名称,标题,摘要,ID),如下所示:

name1 ...nameN|title1 ... titleM|abstract1 ... abstractO|ID

我试过awk和sed,但失败了。任何建议都会很有帮助。提前谢谢。

find -name 'test*.data' |
xargs awk -v n=$N -v t=$M -v a=$O '
BEGIN {
# lines to ignore
x[ i+=(n+1) ]
x[ i+=(t+1) ]
x[ i+=(a+1) ]
# number of lines per file
++i
}
!(FNR in x) {
printf("%s%s", $0, FNR<i?"|":"n")
}
' >>out.csv
  • 适当定义N,M,O
  • 假设数据不包含分隔符|
  • 假设out.csv预先填充了合适的标题行

给定file:

name1
name2
name3
title1
title2
abstract1
abstract2
abstract3
abstract4
ID

然后

awk '
BEGIN {FS = "n"; RS = ""}
{
record = $1
for (i=2; i<=NF; i++) record = record "," $i
printf "%s%s", sep, record
sep = "|"
}
END {printf "n"}
' file

输出
name1,name2,name3|title1,title2|abstract1,abstract2,abstract3,abstract4|ID

使用RS = "",它将空白行序列视为记录FS = "n"将换行符视为字段分隔符。

相关内容

  • 没有找到相关文章

最新更新