我一直在使用bash脚本将平面文本文件转换为乳胶并打印出来时遇到问题。
我有一个这种形式的文件。
Name|LastName|Number|Category
Col1|Col2|Col3|Col4
我想在按类别排序时打印文件,然后按类别排序。我可以使用sort命令来正确排序文件,我可以使用awk和printf打印到屏幕或文件,但我不知道如何将其转换为乳胶。我之前从未使用过乳胶,并且几乎不熟悉它的每个方面。该文件看起来应该是这样的。
Name---------Last Name------Number--------Category
Col1-----------Col2--------------Col3-------------Col4
('-'s
只是空格。)
然后我需要使用LaTex将文件另存为PDF。对此的任何帮助都会很精彩。
答案 0 :(得分:1)
考虑以下
% cat try.csv
four|five|six|cat1
one|two|three|cat3
seven|eight|nine|cat2
这是一个输入文件,似乎是您正在描述的形式。
% sort --field-separator=\| -k 4 try.csv | sed -e 's/|/\&/g' -e 's/$/\\\\/' >table-content.tex
% cat table-content.tex
four&five&six&cat1\\
seven&eight&nine&cat2\\
one&two&three&cat3\\
--field-separator
选项表示我们希望竖线字符分隔字段,-k 4
选项表示我们要对字段4(即类别列)进行排序。它的输出被发送到一个sed脚本,该脚本用&
字符替换每个垂直条字符(转义为\&
,否则sed
将该字符解释为其他字符),以及用$
字符串替换行尾(即\\
)(这些反斜杠中的每一个都必须使用反斜杠进行转义,或者,sed
将其解释为其他内容) 。结果是一个LaTeX对表的想法的文件:它有由&
字符分隔的列,每行以\\
结束。
然后我们\input
进入LaTeX文档:
% cat sorted.tex
\documentclass{article}
\begin{document}
This is a table:
\begin{centering}
\begin{tabular}{cccc}
\input{content}
\end{tabular}\\
\end{centering}
\end{document}
您可以在线搜索有关LaTeX的信息。
然后在此sorted.tex
文件上运行LaTex:
% pdflatex sorted
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
restricted \write18 enabled.
entering extended mode
(./sorted.tex
LaTeX2e <2011/06/27>
... ... ...
Output written on sorted.pdf (1 page, 15286 bytes).
Transcript written on sorted.log.
%
...结果是一张PDF,其格式很合理。
sed
命令有点特殊,因为您必须了解sed
正则表达式替换的工作方式(即s/from/to/
替换)和LaTeX所需的&
和\\
必须在此处进行转义,这有点令人讨厌。但除此之外,这只是sort
和sed
以及朋友设计用于的目的。