在unix中,头被分隔并转换为带有seq号和部分文件号的列

  • 本文关键字:seq 文件 unix 转换 分隔 unix
  • 更新时间 :
  • 英文 :


我有一个带有标题的以制表符分隔的数据文件。我想把这个头文件拆分并存储在另一个文件中,并使用相应的序列和文件编号。

这是原始文件名:

AllResponses_11003_6_7_20132_17_33AM1.txt

这是它包含的信息(第一行是标题):

"ID"    "NAME"  "LOCAL PLACE"   "CONTACT NUM"
a1      bala    pal             kak
ba1     kri     kap             ute

这是我想要获得的输出,也是用制表符分隔的:

seq_num  file_num  header_nm
1        11003     ID
2        11003     NAME
3        11003     LOCAL PLACE
4        11003     CONTACT NUM

如有任何帮助,不胜感激。


I tried with following

#!/bin/ksh
export INFAHOME=/informat/PowerCenter/9.1.0/server/infa_shared
export SRCDIR=${INFAHOME}/SrcFiles/CSI/INCOMING
export filename=${SRCDIR}/AllResponses_11003_6_7_20132_17_33AM1.txt
export filenum=$(echo $filename | tr -dc 0-9 |cut -c 1-5)
echo seq_num file_num hname
cnt=1
for h in $(head -1 "$filename" )
do
   echo $cnt $filenum $h cnt=$((cnt+1))
done

表示字对字而不是分隔符对分隔符

这是我在您的帮助下使用awk构建的代码,但不工作。Pl的帮助。

#!/bin/ksh
export INFAHOME=/informat/PowerCenter/9.1.0/server/infa_shared
export SRCDIR=${INFAHOME}/SrcFiles/CSI/INCOMING
export file=${SRCDIR}/AllResponses_11003_6_7_20132_17_33AM1.txt
export file1=AllResponses_11003_6_7_20132_17_33AM1.txt
export name=$(echo $file1 | cut -d_ -f2) #gets 11003
$ awk -v file=$name -F"t" 'BEGIN{print "seq_numtfile_numtheader_nm"} NR==1 {for (i=1`enter code here`;i<=NF;i++) {print i"t"file,"t"$i}}' $file

低于错误。Pl帮助

    文件
  • = 11003"- f t"开始{打印"seq_num tfile_num theader_nm"}NR = = 1的{(i = 1; i<= NF;我+ +){我" t"文件,打印"t "$我}}"/备用/PowerCenter/9.1.0/服务器/infa_shared/SrcFiles/CSI/输入/AllResponses_11003_6_7_20132_17_33AM1.txtCSI_SURVEY_FILE_CREA。ksh: line 7: v not found

你好,我还需要你帮个忙…我需要动态地传递文件名,并为每个文件创建单独的输出文件。Pl的帮助。

让我们尝试使用awk和bash的混合:

$ file="AllResponses_11003_6_7_20132_17_33AM1.txt"
$ name=$(echo $file | cut -d_ -f2) #gets 11003
$ awk -v file=$name -F"t" 
      'OFS="t"; print "seq_num","file_num","header_nm"}
       NR==1 {for (i=1;i<=NF;i++) {print i,file,$i}}' $file
seq_num file_num        header_nm
1       11003   "ID"
2       11003   "NAME"
3       11003   "LOCAL PLACE"
4       11003   "CONTACT NUM"
给定

file="AllResponses_11003_6_7_20132_17_33AM1.txt"

name=$(echo $file | cut -d_ -f2) #gets 11003

从字符串XXXX_1111_YYY_ZZZ_...中获取1111。然后将此值保存在$name中,以便awk可以使用它。

awk -v file=$name -F"t" 'BEGIN{OFS="t"; print "seq_num","file_num","header_nm"} NR==1 {for (i=1;i<=NF;i++) {print i,file,$i}}' $file
  • -v file=$name。使file成为awk使用的变量,其值为$name
  • -F"t"。设置制表符作为分隔符。
  • 'BEGIN{print "seq_num","file_num","header_nm"}。在处理文件之前打印头文件。
  • NR==1。只适用于第一行。
  • {for (i=1;i<=NF;i++) {print i,file,$i}}' $file。打印每个字段号+ $name +值。

最新更新