【问题标题】:Using cat command start each file with new line [duplicate]使用 cat 命令以新行开始每个文件[重复]
【发布时间】:2020-02-01 14:42:25
【问题描述】:

我正在尝试使用 cat 命令将不同的文件合并到一个文件中。

cat F_Worker_TEMP_VO.dat F_PERSON_NAME_VO.dat F_PERSON_CITIZENSHIP_VO.dat F_PERSON_LEGISLATIONDATA_VO.dat F_PERSON_RELIGION_VO.dat F_PERSON_PASSPORT_VO.dat F_PERSON_DRIVERSLIC_VO.dat F_PERSON_NATIONALIDE_VO.dat F_PERSON_NATIONALIDE_ADH_TEMP_VO.dat F_PERSON_NATIONALIDE_SSN_TEMP_VO.dat > Worker.dat

Worker.dat 是我的输出文件。

使用上面的代码,第二个文件在第一个文件数据的末尾开始。我希望每个文件数据都以新行开头

我已经尝试在上面的代码中插入 /n, echo。它没有给我输出

cat F_Worker_TEMP_VO.dat F_PERSON_NAME_VO.dat F_PERSON_CITIZENSHIP_VO.dat F_PERSON_LEGISLATIONDATA_VO.dat F_PERSON_RELIGION_VO.dat F_PERSON_PASSPORT_VO.dat F_PERSON_DRIVERSLIC_VO.dat F_PERSON_NATIONALIDE_VO.dat F_PERSON_NATIONALIDE_ADH_TEMP_VO.dat F_PERSON_NATIONALIDE_SSN_TEMP_VO.dat > Worker.dat

示例预期格式 每个元数据都是我正在合并的不同文件的结果。每个元数据都应以新行开头

METADATA    Worker  EffectiveStartDate  EffectiveEndDate    StartDate   CategoryCode    ActionCode  BloodType   CorrespondenceLanguage  DateOfBirth TownOfBirth SourceSystemOwner
METADATA    PersonName  PersonNameId    EffectiveStartDate  EffectiveEndDate    PersonId(SourceSystemId)    SourceSystemOwner   SourceSystemId  Title   KnownAs LegislationCode NameType
METADATA    PersonCitizenship   CitizenshipId   PersonId(SourceSystemId)    DateFrom    DateTo  LegislationCode CitizenshipStatus   SourceSystemOwner   SourceSystemId  



Actual
METADATA    Worker  EffectiveStartDate  EffectiveEndDate    StartDate   CategoryCode    ActionCode  BloodType   CorrespondenceLanguage  DateOfBirth TownOfBirth SourceSystemOwner   SourceSystemIdMETADATA  PersonName  PersonNameId    EffectiveStartDate  EffectiveEndDate    PersonId(SourceSystemId)    SourceSystemOwner   SourceSystemId  Title   KnownAs LegislationCode NameTypeMETADATA    PersonCitizenship   CitizenshipId   PersonId(SourceSystemId)    DateFrom    DateTo  LegislationCode CitizenshipStatus   SourceSystemOwner

目前,每个结果文件之间存在间隙。它从上一个文件结果的结尾开始

【问题讨论】:

  • 1.遍历文件。 2. 对于每个文件 a) cat it b) 打印一个换行符。或者更高级 - 将每行上的文件列表输入到 xargs,将其应用于 sed,在文件的最后一行添加换行符。
  • 你能帮我写代码吗?我是 unix 新手
  • 您的文件不以换行符结尾?这可以说是坏了。
  • 不,结果来了是继续以前的文件数据。
  • 例如,personname 文件的元数据标记在工作文件源系统数据的数据之后开始

标签: linux shell unix


【解决方案1】:

又快又脏,在每个元数据之前添加换行符:

cat F_Worker_TEMP_VO.dat ....dat | sed 's/METADATA/\nMETADATA/g' > Worker.dat

脏,在每个元数据之前添加换行符,除了第一个:

cat F_Worker_TEMP_VO.dat ....dat | sed 's/\(.\)METADATA/\1\nMETADATA/g' > Worker.dat

循环:

for file in F_Worker_TEMP_VO.dat ... F_PERSON_NATIONALIDE_SSN_TEMP_VO.dat; do
   cat "${file}"
   echo
done > Worker.dat

【讨论】:

    【解决方案2】:

    我相信这个 StackOverflow 答案涵盖了您可能需要的所有内容: Concatenating Files And Insert New Line In Between Files

    不管怎样,这是你想要的命令:

    for f in *.dat; do (cat "${f}"; echo) >> finalfile.dat; done
    

    如果您只想以某种顺序连接文件的子集,则可以使用数组。 Sed 和 Awk 的使用也在链接的 StackOverflow 答案中。

    【讨论】:

    • 这看起来真的像复制品。
    • 我很确定它是,但我是新来的,所以我相信我不能将它标记为一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2016-08-08
    • 2021-05-18
    • 2013-11-09
    • 2023-03-28
    • 2016-12-06
    相关资源
    最近更新 更多