首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何安装gawk(和gawkextlib)?

如何安装gawk(和gawkextlib)?
EN

Unix & Linux用户
提问于 2020-03-25 20:50:11
回答 2查看 419关注 0票数 1

安装CSV扩展gawk有简单而客观的方法吗?

试着停下来。需要更多的一步

使用UBUNTU 18 LTS。

  1. wget -c http://ftp.gnu.org/gnu/gawk/gawk-5.0.1.tar.gz (和gawk-5.0.1.tar.gz.sig)
  2. gpg --verify gawk-5.0.1.tar.gz.sig gawk-5.0.1.tar.gz错误:“使用DF597815937EC0D2.不能检查签名:没有公钥”。
  3. tar xvzf gawk-5.0.1.tar.gz
  4. cd gawk-5.0.1
  5. 运行sudo su后运行./configure && make && make check && make install
代码语言:javascript
复制
...
... long long process
...
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib/gawk

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make  install-data-hook
make[4]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
for i in filefuncs.la fnmatch.la fork.la inplace.la intdiv.la ordchr.la readdir.la readfile.la revoutput.la revtwoway.la rwarray.la time.la ; do \
        rm -f /usr/local/lib/gawk/$i ; \
done
make[4]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
make[3]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
Making install in extras
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
make[2]: Nothing to be done for 'install-exec-am'.
 /bin/mkdir -p '/usr/local/etc/profile.d'
 .././install-sh -c -m 644 gawk.sh gawk.csh '/usr/local/etc/profile.d'
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
Making install in doc
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
make[2]: Nothing to be done for 'install-exec-am'.
 /bin/mkdir -p '/usr/local/share/info'
 .././install-sh -c -m 644 ./gawk.info ./gawkinet.info ./gawkworkflow.info '/usr/local/share/info'
 install-info --info-dir='/usr/local/share/info' '/usr/local/share/info/gawk.info'
 install-info --info-dir='/usr/local/share/info' '/usr/local/share/info/gawkinet.info'
 install-info --info-dir='/usr/local/share/info' '/usr/local/share/info/gawkworkflow.info'
 /bin/mkdir -p '/usr/local/share/man/man1'
 .././install-sh -c -m 644 gawk.1 '/usr/local/share/man/man1'
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
Making install in awklib
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
 /bin/mkdir -p '/usr/local/libexec/awk'
  .././install-sh -c pwcat grcat '/usr/local/libexec/awk'
make  install-exec-hook
make[3]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
/bin/bash ../mkinstalldirs /usr/local/share/awk
mkdir -p -- /usr/local/share/awk
for i in passwd.awk group.awk ./eg/lib/*.awk ; do \
        progname=`echo $i | sed 's;.*/;;'` ; \
        .././install-sh -c -m 644 $i /usr/local/share/awk/$progname ; \
done
make[3]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
Making install in po
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/po'
installing ca.gmo as /usr/local/share/locale/ca/LC_MESSAGES/gawk.mo
installing da.gmo as /usr/local/share/locale/da/LC_MESSAGES/gawk.mo
installing de.gmo as /usr/local/share/locale/de/LC_MESSAGES/gawk.mo
installing es.gmo as /usr/local/share/locale/es/LC_MESSAGES/gawk.mo
installing fi.gmo as /usr/local/share/locale/fi/LC_MESSAGES/gawk.mo
installing fr.gmo as /usr/local/share/locale/fr/LC_MESSAGES/gawk.mo
installing id.gmo as /usr/local/share/locale/id/LC_MESSAGES/gawk.mo
installing it.gmo as /usr/local/share/locale/it/LC_MESSAGES/gawk.mo
installing ja.gmo as /usr/local/share/locale/ja/LC_MESSAGES/gawk.mo
installing ko.gmo as /usr/local/share/locale/ko/LC_MESSAGES/gawk.mo
installing ms.gmo as /usr/local/share/locale/ms/LC_MESSAGES/gawk.mo
installing nl.gmo as /usr/local/share/locale/nl/LC_MESSAGES/gawk.mo
installing pl.gmo as /usr/local/share/locale/pl/LC_MESSAGES/gawk.mo
installing pt.gmo as /usr/local/share/locale/pt/LC_MESSAGES/gawk.mo
installing pt_BR.gmo as /usr/local/share/locale/pt_BR/LC_MESSAGES/gawk.mo
installing sv.gmo as /usr/local/share/locale/sv/LC_MESSAGES/gawk.mo
installing vi.gmo as /usr/local/share/locale/vi/LC_MESSAGES/gawk.mo
installing zh_CN.gmo as /usr/local/share/locale/zh_CN/LC_MESSAGES/gawk.mo
if test "gawk" = "gettext-tools"; then \
  /bin/mkdir -p /usr/local/share/gettext/po; \
  for file in Makefile.in.in remove-potcdate.sin quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot   Makevars.template; do \
    .././install-sh -c -m 644 ./$file \
                    /usr/local/share/gettext/po/$file; \
  done; \
  for file in Makevars; do \
    rm -f /usr/local/share/gettext/po/$file; \
  done; \
else \
  : ; \
fi
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/po'
Making install in test
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'

似乎没问题。我的测试gawk --version是4.1.1,现在是5.0.1。在上面的转储中,我们可以看到make[4]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension',因此似乎存在扩展库。

但现在,最初的问题是:我需要gawk-csv,而它是“命令未找到”。

如何下载和install CSV扩展?

我也尝试gawk -i csv但是错误"gawk:致命:不能打开源代码文件‘`csv’来读取(没有这样的文件或目录)“。

PS1:如何检查已安装的所有扩展列表?PS2:另一个向导说我需要运行rpmbuild..。

Notes

摘要:我需要工具,而不是学习黑客。

该工具的Linux名称似乎是gawk-csv,但它的主要库名是gawkextlib

有两个相互冲突的指南,自述文件安装-CSV-分机。唯一的下载是为第一个。

PS:有这里有6岁的同性恋,但直到2020年,gawk-csv才是1.0.0版。

CSV是重要的

它是经典AWK的一个非常重要的扩展,因为通用的CSV文件不仅是"a,b,c",还需要解析标准CSV引号、转义行等等。

AWK是完美的(!),但是用经典的AWK做 impossible <#>of大CSV文件需要gawk。

EN

回答 2

Unix & Linux用户

发布于 2020-03-25 21:48:01

这个菜谱现在对我很管用。YMMV

DSTPATH更改为要安装该扩展名的任何位置。

我不建议在系统目录中手动安装任何东西(例如。应该只由发行版的工具(aptyum等)来管理。

代码语言:javascript
复制
DSTPATH=/tmp/baz
set -e
git clone https://git.code.sf.net/p/gawkextlib/code gawkextlib-code
cd gawkextlib-code/lib
autoreconf -i
./configure --prefix=$DSTPATH && make -j13 install
cd ../csv
autoreconf -i
./configure --prefix=$DSTPATH --with-gawkextlib=$DSTPATH && make -j13 install

export AWKPATH=$DSTPATH/share/awk AWKLIBPATH=$DSTPATH/lib/gawk
echo foo,bar,baz | gawk -i csv 'csvsplit($0,a){print a[2]}'

这一切都过分扼杀了IMHO,而且它可能失败的方式有上千种(缺乏适当的开发工具等等)。

票数 2
EN

Unix & Linux用户

发布于 2020-05-27 00:27:45

将关于安装到/usr的争论放在一边--我在构建csv库时发现的主要问题是,Makefile没有指定链接csv.so库时定位D0库所需的运行时路径。这意味着如果不设置LD_LIBRARY_PATHcsv.so将无法在运行时找到libgawkextlib.so.0,即使是构建和安装看起来也是成功的。结果是在调用gawk时出现了类似这样的错误:

代码语言:javascript
复制
gawk: csv:15: fatal: load_ext: cannot open library `/usr/local/lib/gawk/csv.so' (libgawkextlib.so.0: cannot open shared object file: No such file or directory)

gawk在/usr/local/lib/gawk/csv.so下找到D6,但是csv.so依赖于libgawkextlib.so.0,而D8不是在运行库路径上。

我在configure中找不到解决这个问题的选项,因此我再次从make输出运行链接行,但是添加了以下内容:-Wl,-rpath,/usr/local/lib

-Wl将以下选项直接从gcc发送到链接。

所以整行是:gcc -shared -fPIC -DPIC .libs/csv.o .libs/csv_parser.o .libs/csv_convert.o .libs/csv_split.o .libs/csv_input.o .libs/strbuf.o .libs/awk_fieldwidth_info.o -L/usr/local/lib/ -Wl,-rpath,/usr/local/lib -L/usr/local/bin -lgawkextlib -g -O2 -Wl,-soname -Wl,csv.so -o .libs/csv.so

在此之后,csv.so可以在没有我操作库搜索路径的情况下找到libgawkextlib.so.0

代码语言:javascript
复制
$ ldd csv.so 
        linux-vdso.so.1 (0x00007ffda36e6000)
        libgawkextlib.so.0 => /usr/local/lib/libgawkextlib.so.0 (0x00007ffb8f535000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffb8f144000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ffb8f93d000)

因此,我在Ubuntu18.04上的整个过程如下所示,使用了gawk以前从源代码构建并安装在/usr/local/bin/gawk上的版本。还请注意,我已经安装了所有的构建工具,您可能需要使用apt来安装gcc、autoconf、libtool等工具--一个很好的起点是sudo apt install build-essential

资料来源:

代码语言:javascript
复制
git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib
cd gawkextlib

构建库-这里没有什么特别的- with-gawk只是确保我们使用编译后的gawk版本,而不是系统版本:

代码语言:javascript
复制
cd lib
autoreconf -i
./configure --with-gawk=/usr/local/bin/
make
sudo make install

使用补丁到库构建csv扩展:

代码语言:javascript
复制
cd ../csv
autoreconf -i
./configure --with-gawk=/usr/local/bin/ --with-gawkextlib=/usr/local/lib/
make
gcc -shared  -fPIC -DPIC  .libs/csv.o .libs/csv_parser.o .libs/csv_convert.o .libs/csv_split.o .libs/csv_input.o .libs/strbuf.o .libs/awk_fieldwidth_info.o   -L/usr/local/lib/ -Wl,-rpath,/usr/local/lib -L/usr/local/bin -lgawkextlib  -g -O2   -Wl,-soname -Wl,csv.so -o .libs/csv.so
sudo make install

成功:

代码语言:javascript
复制
$ echo foo,bar,baz | gawk -i csv 'csvsplit($0,a){print a[2]}'
bar

最后一个提示--如果您对未安装makeinfo有问题--在ubuntu上:

代码语言:javascript
复制
sudo apt-get install texinfo
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/574956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档