Unix 使用awk或sed将带有标题的列添加到管道分隔文件

Unix 使用awk或sed将带有标题的列添加到管道分隔文件,unix,awk,sed,data-cleaning,Unix,Awk,Sed,Data Cleaning,我试图添加一个标题为“DATE”的列,其值等于日期“DD-MM-YY”。我遇到的问题是,我运行的代码将“DATE”和“DD-MM-YY”值添加到新行的第二列,而不是添加到数据中的现有行 我尝试过使用awk和sed,但都产生了相同的结果 提前感谢您的帮助 for y in 2021 do for m in 02 do for d in 01 do awk -v d=$y-$m-$d -F"|" 'BEGIN {OFS =

我试图添加一个标题为“DATE”的列,其值等于日期“DD-MM-YY”。我遇到的问题是,我运行的代码将“DATE”和“DD-MM-YY”值添加到新行的第二列,而不是添加到数据中的现有行

我尝试过使用awk和sed,但都产生了相同的结果

提前感谢您的帮助

for y in 2021 
        do
for m in  02
        do
for d in 01 
        do 
 awk -v d=$y-$m-$d -F"|" 'BEGIN {OFS = "|"} FNR==1{$(NF+1)="DATE"} FNR>1{$(NF+1)=d;} 1' Corporate_bond_mstr-$y-$m-$d.txt > check.txt  
done
done
done

原始数据

FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD|DATE   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP|DD-MM-YY   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND|DD-MM-YY   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT|DD-MM-YY   
运行代码后的数据

FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD   
       |DATE   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP   
       |DD-MM-YY   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND   
       |DD-MM-YY   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT   
       |DD-MM-YY  
所需数据

FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD|DATE   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP|DD-MM-YY   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND|DD-MM-YY   
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT|DD-MM-YY   

使用GNU,这将产生所需的数据:

y=YY m=MM d=DD
sed -e '1s/[ ]*$/|DATE/' \
    -e '2,$s/[ ]*$/|'"$d-$m-$y"'/' data

也许
命令在欺骗您;请尝试在不使用的情况下运行。

我需要清除文本文件中的回车符,代码才能正确运行

sed-e's/[\r\n]//g'Corporate_bond_mstr-$y-$m-$d.txt>chg1.txt
sed-e'0,/| CNVRB_FL/s/| CNVRB_FL |/'chg1.txt>chg.txt

sed-e'1s/$/DATE/'-e“2,$s/$/|$y-$m-$d/”-e's/>|/|/g'chg.txt>Corporate_bond_mstr-$y-$m-$d.txt

谢谢你的评论,但即使没有column命令,我也会得到同样的结果。我是一个相当新手,我一直在用头撞墙试图弄清楚这一点,但一直很麻烦。