Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
要分隔的标头,并在unix中转换为包含序号和部分文件号的列_Unix - Fatal编程技术网

要分隔的标头,并在unix中转换为包含序号和部分文件号的列

要分隔的标头,并在unix中转换为包含序号和部分文件号的列,unix,Unix,我有一个带有标题的制表符分隔的数据文件。我想将该头拆分,并将其存储在另一个文件中,以及相应的序列号和文件号 这是原始文件名: AllResponses\u 11003\u 6\u 7\u 20132\u 17\u 33AM1.txt 这是它包含的信息(第一行是标题): “ID”“NAME”“LOCAL PLACE”“CONTACT NUM” a1巴拉帕尔卡克酒店 ba1 kri kap ute 这是我想要获得的输出,也是以制表符分隔的: seq_num file_num header_nm

我有一个带有标题的制表符分隔的数据文件。我想将该头拆分,并将其存储在另一个文件中,以及相应的序列号和文件号

这是原始文件名:

AllResponses\u 11003\u 6\u 7\u 20132\u 17\u 33AM1.txt
这是它包含的信息(第一行是标题):

“ID”“NAME”“LOCAL PLACE”“CONTACT NUM”
a1巴拉帕尔卡克酒店
ba1 kri kap ute
这是我想要获得的输出,也是以制表符分隔的:

seq_num file_num header_nm
111003身份证
211003姓名
3 11003本地地点
4 11003联系电话号码
任何帮助都将不胜感激


我试着用下面的方法

#/bin/ksh
导出INFAHOME=/informat/PowerCenter/9.1.0/server/infa_shared
导出SRCDIR=${INFAHOME}/SrcFiles/CSI/INCOMING
导出文件名=${SRCDIR}/AllResponses\u 11003\u 6\u 7\u 20132\u 17\u 33AM1.txt
导出filenum=$(echo$filename | tr-dc 0-9 | cut-c 1-5)
echo seq_num file_num hname
cnt=1
对于h,单位为$(头-1“$filename”)
做
echo$cnt$filenum$h cnt=$((cnt+1))
完成
它是逐字逐句地给予,而不是给予定界者

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

#/bin/ksh
导出INFAHOME=/informat/PowerCenter/9.1.0/server/infa_shared
导出SRCDIR=${INFAHOME}/SrcFiles/CSI/INCOMING
导出文件=${SRCDIR}/AllResponses\u 11003\u 6\u 7\u 20132\u 17\u 33AM1.txt
导出文件1=AllResponses\u 11003\u 6\u 7\u 20132\u 17\u 33AM1.txt
导出名称=$(echo$file1 | cut-d 35;-f2)#获取11003

$awk-v file=$name-F“\t”'BEGIN{print”seq_num\tfile_num\theader_nm”}NR==1{for(i=1`在此处输入代码`;i让我们尝试使用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"
线路

name=$(echo $file | cut -d_ -f2) #gets 11003
从字符串中获取
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

awk-v file=$name-F“\t”'BEGIN{OFS=“\t”;print“seq_num”,“file_num”,“header_nm”}NR==1{for(i=1;iIs您有没有尝试过任何不起作用的东西?是的..尝试过以下#!/bin/ksh export INFAHOME=/informat/PowerCenter/9.1.0/server/infa_共享导出SRCDIR={INFAHOME}/srcdire/所有响应_11003_6_7_20132_17_33AM1.txt导出filenum=$(echo$filename | tr-dc 0-9 | cut-c 1-5)echo seq_num file_num hname cnt=1表示h in$(head-1“$filename”)do echo$cnt$filenum$h cnt=$(cnt+1))doneit是逐字逐句地给予而不是给予定界者#!/bin/ksh export INFAHOME=/informat/PowerCenter/9.1.0/server/infa_shared export SRCDIR=${INFAHOME}/SrcFiles/CSI/INCOMING export file=${SRCDIR}/AllResponses\u 11003\u 6\u 7\u 20132\u 17\u 33AM1.txt export name=$(echo$file | cut d(d)-f2)#获得11003$awk-v文件$$name=$F开始打印{“seq_num\tfile_num\theader_nm”}NR==1{for(i=1;iMy代码是独立的,应该足以满足您的需要。无论如何,如果您想将其集成到当前代码中,请使用当前代码更新您的问题,以便我可以更好地查看它(注释中的格式很难理解代码)。+'$'awk-v file=11003'-F\t''BEGIN print”seq_num\tfile_num\theader_nm“}NR==1{对于(i=1;我之前说过,请用代码和错误更新您的问题,不要在评论中发布它们。很抱歉在评论中发布。请查看我更新的问题
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